#include <stdio.h>          // 标准输入输出
#include <stdlib.h>         // 标准函数库
#include <string.h>         // 字符串处理(操作字符数组)
#include <unistd.h>         // POSIX标准接口

#include "ohos_init.h"
#include "cmsis_os2.h"      // CMSIS-RTOS API V2

// #include "hdf_log.h"
#include "iot_gpio.h"   // OpenHarmony API：IoT硬件设备操作接口-GPIO
#include "hi_io.h"      // 海思 Pegasus SDK：IoT硬件设备操作接口-IO
#include "hi_pwm.h"     // 海思 Pegasus SDK：IoT硬件设备操作接口-PWM
#include "hi_uart.h"    // 海思 Pegasus SDK：IoT硬件设备操作接口-urat
#include "hi_gpio.h"    // 海思 Pegasus SDK：IoT硬件设备操作接口-gpio


// 相关api
// 初始化，配置一个UART设备
// unsigned int IoTUartInit(unsigned int id, const IotUartAttribute *param);	
// 从UART设备中读取数据
// int IoTUartRead(unsigned int id, unsigned char *data, unsigned int dataLen);
// 将数据写入UART设备
// int IoTUartWrite(unsigned int id, const unsigned char *data, unsigned int dataLen);


void InitTrafficUart(void);
void SetTrafficUart(int color, int state);


#define UART_RX_GPIO 0  // UART串口使用的RX口
#define UART_TX_GPIO 1  // UART串口使用的TX口

#define BEIDOU_UART_IDX 1;

// 用于北斗通信的串口
static hi_uart_attribute param;

static hi_uart_extra_attr extra_att;

static char datas[2048] ;
int datas_len = 2048 ;

	
void UartTestSample(void)
{
    unsigned int len = 0; 
    printf("anran wait uart");
    // int IoTUartRead(unsigned int id, unsigned char *data, unsigned int dataLen);
    int id =  BEIDOU_UART_IDX;
    // HI_ERR_FAILURE
    while (1)
    {
        len = hi_uart_read(id,datas,datas_len);
        if(len == HI_ERR_FAILURE)
            printf("GPS datas = ERROR \n");
        else if(len > 0 )
            printf("GPS datas = %s \n",datas);
        else if(len == 0 )
            printf("GPS datas 0 = %s \n",datas);
        // 休眠1秒
        usleep(100000); 
    }
    
}
void InitUart(void)
{
    // 初始化GPIO模块
    IoTGpioInit(UART_TX_GPIO) ;
    IoTGpioInit(UART_RX_GPIO) ;

    // 设置UART_TX_GPIO的GPIO能力
    hi_io_set_func(UART_TX_GPIO, HI_IO_FUNC_GPIO_0_UART1_TXD);
    hi_io_set_func(UART_RX_GPIO, HI_IO_FUNC_GPIO_1_UART1_RXD);

    // ret
    hi_uart_idx id = BEIDOU_UART_IDX ;
    param.baud_rate = 9600 ; //初始化波特率
    param.data_bits = 8 ; // 数据位
    param.stop_bits = 1 ;//停止位
    // param.parity = 0 ;//奇偶校验位
    // param.pad = 0 ;// reserved pad

    hi_uart_init(id,&param,&extra_att);
    
}


void helloUart(void)
{
    printf("Hello Uart\n");
    InitUart() ; 
    UartTestSample();
}

// 入口函数
static void helloUartEntry(void )
{

    // 定义线程属性
    osThreadAttr_t attr;
    attr.name = "helloUart";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = 10240;
    attr.priority = osPriorityNormal;

    // 创建线程
    if (osThreadNew(helloUart, NULL, &attr) == NULL)
    {
        printf("[uartDemoEntry] Falied to create helloUart!\n");
    }
}


SYS_RUN(helloUartEntry);